package br.com.vti.sisp_sicrim.antigo.controller.relatorios;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.util.Relatorios;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela Scrr1600Report
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Scrr1600Report {
	private String dataCorrente;
	private String nroPagina;
	private int jDiaIni;
	private int jMesIni;
	private int jAnoIni;
	private int jDiaFim;
	private int jMesFim;
	private int jAnoFim;
	private int jTotal;
	private int[] jMatricula = new int[13];
	private String[] jDigitador = new String[13];
	private int[] jQuantidade = new int[13];
	private String horaCorrente;
	private Result result;
	private Sessao sessao;
	private Relatorios report; // Classes views

	// Classes includes
	public Scrr1600Report() throws JRException, ParseException {
		inicializar();
	}

	public Scrr1600Report(Sessao sessao) throws JRException, ParseException {
		this.sessao = sessao;
		inicializar();
	}

	public void inicializar() throws JRException, ParseException {
		report = new Relatorios();
		jDiaIni = 0;
		jMesIni = 0;
		jAnoIni = 0;
		jDiaFim = 0;
		jMesFim = 0;
		jAnoFim = 0;
		Arrays.fill(jMatricula, 0);
		Arrays.fill(jDigitador, "");
		Arrays.fill(jQuantidade, 0);
		jTotal = 0;
		dataCorrente = new SimpleDateFormat("dd/MM/yyyy").format(Calendar.getInstance().getTime()); // *DATE
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX

		report.setNumeroRel(1, "D");
		{
			report.setNumeroLinhaRel(1, 1);
			{
				report.adicionaCampo(1, 1, "lit_1_1", "C", "", "/");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(2, 3);
			{
				report.adicionaCampo(1, 38, "lit_1_38", "C", "", "//// SISTEMA DE IDENTIFICACAO CRIMINAL");
				report.adicionaCampo(40, 1, "lit_40_1", "C", "", "/");
				report.adicionaCampo(71, 10, "dataCorrente", "S", "", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(3, 2);
			{
				report.adicionaCampo(1, 1, "lit_1_1", "C", "", "/");
				report.adicionaCampo(71, 8, "horaCorrente", "S", "", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(4, 2);
			{
				report.adicionaCampo(63, 7, "lit_63_7", "C", "", "Pagina.");
				report.adicionaCampo(74, 5, "nroPagina", "S", "", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(6, 1);
			{
				report.adicionaCampo(30, 21, "lit_30_21", "C", "", "FICHA INDICE CRIMINAL");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(10, 12);
			{
				report.adicionaCampo(1, 27, "lit_1_27", "C", "", "Periodo de Referencia..: de");
				report.adicionaCampo(30, 2, "Jdiaini", "N", "99", "");
				report.adicionaCampo(33, 1, "lit_33_1", "C", "", "/");
				report.adicionaCampo(35, 2, "Jmesini", "N", "99", "");
				report.adicionaCampo(38, 1, "lit_38_1", "C", "", "/");
				report.adicionaCampo(40, 4, "Janoini", "N", "", "");
				report.adicionaCampo(45, 2, "lit_45_2", "C", "", "`a");
				report.adicionaCampo(49, 2, "Jdiafim", "N", "99", "");
				report.adicionaCampo(52, 1, "lit_52_1", "C", "", "/");
				report.adicionaCampo(54, 2, "Jmesfim", "N", "99", "");
				report.adicionaCampo(57, 1, "lit_57_1", "C", "", "/");
				report.adicionaCampo(59, 4, "Janofim", "N", "", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(14, 3);
			{
				report.adicionaCampo(8, 9, "lit_8_9", "C", "", "Matricula");
				report.adicionaCampo(25, 23, "lit_25_23", "C", "", "Nome do(a) Digitador(a)");
				report.adicionaCampo(55, 20, "lit_55_20", "C", "", "Quantidade de Fichas");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(15, 2);
			{
				report.adicionaCampo(8, 9, "lit_8_9", "C", "", "Digitador");
				report.adicionaCampo(55, 20, "lit_55_20", "C", "", "Digitadas no Periodo");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(16, 1);
			{
				report.adicionaCampo(8, 1, "lit_8_1", "C", "", "-");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(17, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[1]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[1]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[1]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(18, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[2]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[2]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[2]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(19, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[3]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[3]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[3]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(20, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[4]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[4]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[4]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(21, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[5]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[5]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[5]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(22, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[6]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[6]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[6]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(23, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[7]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[7]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[7]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(24, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[8]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[8]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[8]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(25, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[9]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[9]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[9]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(26, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[10]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[10]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[10]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(27, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[11]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[11]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[11]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(28, 3);
			{
				report.adicionaCampo(10, 7, "Jmatricula[12]", "N", "", "");
				report.adicionaCampo(21, 30, "Jdigitador[12]", "X", "", "");
				report.adicionaCampo(56, 6, "Jquantidade[12]", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(29, 1);
			{
				report.adicionaCampo(8, 1, "lit_8_1", "C", "", "-");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(30, 2);
			{
				report.adicionaCampo(8, 43, "lit_8_43", "C", "", "Total de Fichas Digitadas no Periodo ......");
				report.adicionaCampo(56, 6, "Jtotal", "N", "ZZZ.999", "");
				report.setFimLinhaRel();
			}
			report.setNumeroLinhaRel(31, 1);
			{
				report.adicionaCampo(8, 1, "lit_8_1", "C", "", "-");
				report.setFimLinhaRel();
			}
		}
		setDataCorrente(dataCorrente);
		setHoraCorrente(horaCorrente);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		return true;
	}

	public int getJdiaini() {
		return jDiaIni;
	}

	public void setJdiaini(int jDiaIni) throws ParseException {
		this.jDiaIni = jDiaIni;
		report.adicionaValorReport("Jdiaini", jDiaIni);
	}

	public int getJmesini() {
		return jMesIni;
	}

	public void setJmesini(int jMesIni) throws ParseException {
		this.jMesIni = jMesIni;
		report.adicionaValorReport("Jmesini", jMesIni);
	}

	public int getJanoini() {
		return jAnoIni;
	}

	public void setJanoini(int jAnoIni) throws ParseException {
		this.jAnoIni = jAnoIni;
		report.adicionaValorReport("Janoini", jAnoIni);
	}

	public int getJdiafim() {
		return jDiaFim;
	}

	public void setJdiafim(int jDiaFim) throws ParseException {
		this.jDiaFim = jDiaFim;
		report.adicionaValorReport("Jdiafim", jDiaFim);
	}

	public int getJmesfim() {
		return jMesFim;
	}

	public void setJmesfim(int jMesFim) throws ParseException {
		this.jMesFim = jMesFim;
		report.adicionaValorReport("Jmesfim", jMesFim);
	}

	public int getJanofim() {
		return jAnoFim;
	}

	public void setJanofim(int jAnoFim) throws ParseException {
		this.jAnoFim = jAnoFim;
		report.adicionaValorReport("Janofim", jAnoFim);
	}

	public int getJtotal() {
		return jTotal;
	}

	public void setJtotal(int jTotal) throws ParseException {
		this.jTotal = jTotal;
		report.adicionaValorReport("Jtotal", jTotal);
	}

	public int[] getJmatricula() {
		return jMatricula;
	}

	public void setJmatricula(int[] jMatricula) throws ParseException {
		this.jMatricula = jMatricula;
		report.adicionaValorReport("Jmatricula", jMatricula);
	}

	public String[] getJdigitador() {
		return jDigitador;
	}

	public void setJdigitador(String[] jDigitador) throws ParseException {
		this.jDigitador = jDigitador;
		report.adicionaValorReport("Jdigitador", jDigitador);
	}

	public int[] getJquantidade() {
		return jQuantidade;
	}

	public void setJquantidade(int[] jQuantidade) throws ParseException {
		this.jQuantidade = jQuantidade;
		report.adicionaValorReport("Jquantidade", jQuantidade);
	}

	public int getJmatricula(int index) {
		return jMatricula[index];
	}

	public void setJmatricula(int index, int jMatricula) throws ParseException {
		this.jMatricula[index] = jMatricula;
		report.adicionaValorReport("Jmatricula" + "[" + String.valueOf(index) + "]", jMatricula);
	}

	public String getJdigitador(int index) {
		return jDigitador[index];
	}

	public void setJdigitador(int index, String jDigitador) throws ParseException {
		this.jDigitador[index] = jDigitador;
		report.adicionaValorReport("Jdigitador" + "[" + String.valueOf(index) + "]", jDigitador);
	}

	public int getJquantidade(int index) {
		return jQuantidade[index];
	}

	public void setJquantidade(int index, int jQuantidade) throws ParseException {
		this.jQuantidade[index] = jQuantidade;
		report.adicionaValorReport("Jquantidade" + "[" + String.valueOf(index) + "]", jQuantidade);
	}

	public String getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(String dataCorrente) throws ParseException {
		this.dataCorrente = dataCorrente;
		report.adicionaValorReport("dataCorrente", dataCorrente);
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) throws ParseException {
		this.horaCorrente = horaCorrente;
		report.adicionaValorReport("horaCorrente", horaCorrente);
	}

	public String getNroPagina() {
		return nroPagina;
	}

	public void setNroPagina(String nroPagina) throws ParseException {
		this.nroPagina = nroPagina;
		report.adicionaValorReport("nroPagina", nroPagina);
	}

	public void setPageSize(int pagesize) throws JRException {
		report.setPageSize(pagesize);
	}

	public void setLineSize(int linesize) {
		report.setLineSize(linesize);
	}

	public int getPageSize() {
		return report.getPageSize();
	}

	public int getPageLine() {
		return report.getPageLine();
	}

	public void saltaLinhas(int qtdLinhas) throws ParseException, JRException {
		report.saltaLinhas(qtdLinhas);
	}

	public void gravaRelatorio(int nroRel) throws ParseException, JRException {
		setNroPagina(String.valueOf(report.getPageNumber()));
		report.gravaRelatorio(report, nroRel, false);
	}

	public InputStreamDownload imprimir() throws FileNotFoundException, JRException {
		return report.imprimir();
	}
}
